iT邦幫忙

2022 iThome 鐵人賽

DAY 16
0
Software Development

Java入門的30張門票系列 第 16

[Day16] 誰說一定要繼承家業 - 覆寫 & super

  • 分享至 

  • xImage
  •  

這篇要來介紹的就是覆寫 overridding,子類別繼承父類別後,如果不滿意父類別定義的方法,子類別可以在繼承後重新改寫,這就是覆寫。子類別宣告覆寫時,方法名稱、參數個數、參數型別及回傳值皆必須和父類別的被覆寫方法相同,還有一點要注意的是子類別存取控制的存取範圍不可小於父類別。

下面提供一個小例子,Dad跟Son都有一個相同的makeMoney()函式,不過內容不一樣了就是被覆寫掉了,要注意如果父類別的函式沒有回傳值及參數,繼承後也不能更改讓它有回傳值或參數,只能更改裡面的內容。

public class Dad{
    public int money;
    public int house;
    public void makeMoney(){
        System.out.println("我很有錢");
    }
}

public class Son extends Dad{
    public void getSum(int m,int h){
		money = m;
		house = h;
        System.out.println("含著金湯匙");
	}
    public void makeMoney(){
        System.out.println("我也可以不當靠爸族");
    }
}

public class Test{
    public static void main(String[] args) {
    Son son = new Son();
    son.makeMoney();  // 我也可以不當靠爸族
    }
}

super

跟this一樣都是關鍵字,關於this有在Day12有稍微提到過。this是指向自己,也就是自己類別的成員;super則是指向父類別的成員,不過只能呼叫上一級的,不能跨級,子類別可透過super()將共同建構子參數傳給父類別,也就是說如果是共同的資料應該用的是父類別的建構子。

this有兩種,this.和this(),前者是關鍵字後者則是建構子,如果寫了很多建構子提供多元的建構物件方式,建構子之間彼此可以使用this()互相呼叫。super也是分成super.和super(),利用super.可以呼叫父類別中定義好相應參數的建構子,父類別已經定義好的東西,子類別直接取用就好,這種寫法也會比較好維護。

如果把上面的Son做一點小修改,其中的makeMoney內新增一行super.makeMoney(),讓它先呼叫父類別中同名稱的函式,這樣最後主程式的地方就會印出兩行字串(Dad原本的+Son新增的)。

public class Dad{
    public int money;
    public int house;
    public void makeMoney(){
        System.out.println("我很有錢");
    }
}

public class Son extends Dad{
    public void getSum(int m,int h){
		money = m;
		house = h;
        System.out.println("含著金湯匙");
	}
    public void makeMoney(){
        super.makeMoney();  // 新增這一行
        System.out.println("我也可以不當靠爸族");
    }
}

public class Test{
    public static void main(String[] args) {
    Son son = new Son();
    son.makeMoney();  // 我很有錢
                      // 我也可以不當靠爸族
    }
}

上一篇
[Day15] 我想當富二代 - 繼承
下一篇
[Day17] 誰說兒子只能是兒子 - 多型
系列文
Java入門的30張門票30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言